448. Find All Numbers Disappeared in an Array
448. Find All Numbers Disappeared in an Array
Similar Question
442. Find All Duplicates in an Array
Solution Tips
原地标记
Arithmetic-progression
对应 1 - n 的 index,被转换为负数的就是存在的数,没有被转换为负数的值对应的 index 就是不存在的数。
原地标记,把空间复杂度降到最低。
var findDisappearedNumbers = function(nums) {
const len = nums.length
for (let i = 0; i < len;i++) {
const index = Math.abs(nums[i]) - 1
nums[index] = -Math.abs(nums[index])
}
// [-4,-3,-2,-7,8,2,-3,-1]
const res = []
for (let i = 0; i < len; i++) {
if(nums[i]>0){
res.push(i+1)
}
}
return res
}
let nums = [4,3,2,7,8,2,3,1]
console.log(findDisappearedNumbers(nums))
Hash-table
var findDisappearedNumbers = function(nums) {
const n = nums.length;
const hashTable = new Array(n + 1).fill(undefined);
hashTable[0] = 0;
for (let i = 0; i < nums.length; i++) {
const num = nums[i];
if (hashTable[num] === undefined) {
hashTable[num] = num;
}
}
const res = [];
for (let i = 0; i < hashTable.length; i++) {
const item = hashTable[i];
if (item === undefined) {
res.push(i);
}
}
return res;
};